<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h4>用户登录</h4>
<form action="{% url 'no_6:rbac_login' %}" method="post">
    {% csrf_token %}
    用户名：<input type="text" name="username">
    密码：<input type="password" name="pwd">
    <input type="submit">
</form>

<br><hr><br>

<pre>
    RBAC(Role-Based Access Control, 基于角色的访问控制)
    下面说说为什么需要RBAC：
    从代码实现的角度来说，simple的权限管理无论是可读性还是精简程度来说都是无可挑剔的，
    但是从产品的角度看，用户体验却很糟糕，因为需要给每个用户分配URL访问权限是重复性高的枯燥工作，
    因此就诞生了RBAC。
    RBAC生命周期介绍如下：
    用户登录验证
    根据用户身份验证信息，获取用户角色
    通过用户所绑定的角色（有可能不止一个），获取这个角色所绑定的所有权限，并去重
    查询用户所访问的URL是否在角色的权限内，如果在，则继续访问，如果不在，则拒绝访问


    登录页面，有2个用户，user1和user2，密码分别为pwd1和pwd2
    登录成功后，user1有权限访问 no_6:rbac_login, 而user2没有权限访问
</pre>

<br><hr><br>

<pre>
    权限验证几乎是每个用户的数据请求都需要经历的过程，如果给每个视图海曙都写一遍权限验证代码
    或者写一个装饰器的封装权限验证逻辑，都会大大增加工作量，所以自己实现一般都将权限验证设置为中间件
</pre>
</body>
</html>
